package net.lab1024.sa.admin.module.business.purchase.supplier.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.lab1024.sa.admin.module.business.purchase.supplier.domain.entity.SupplierEntity;
import net.lab1024.sa.admin.module.business.purchase.supplier.domain.form.SupplierQueryForm;
import net.lab1024.sa.admin.module.business.purchase.supplier.domain.vo.SupplierVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 供应商DAO
 *
 * @Author 1024创新实验室
 * @Date 2024/07/19 20:30:00
 * @Wechat zhuoda1024
 * @Email lab1024@163.com
 * @Copyright <a href="https://1024lab.net">1024创新实验室</a>
 */
@Mapper
public interface SupplierDao extends BaseMapper<SupplierEntity> {

    /**
     * 分页查询供应商
     *
     * @param page 分页参数
     * @param queryForm 查询条件
     * @return 分页结果
     */
    List<SupplierVO> queryPage(Page<SupplierVO> page, @Param("queryForm") SupplierQueryForm queryForm);

    /**
     * 根据供应商编码查询
     *
     * @param supplierCode 供应商编码
     * @param deletedFlag 删除标识
     * @return 供应商实体
     */
    SupplierEntity selectByCode(@Param("supplierCode") String supplierCode, @Param("deletedFlag") Boolean deletedFlag);

    /**
     * 根据供应商名称查询
     *
     * @param supplierName 供应商名称
     * @param deletedFlag 删除标识
     * @return 供应商实体
     */
    SupplierEntity selectByName(@Param("supplierName") String supplierName, @Param("deletedFlag") Boolean deletedFlag);

    /**
     * 根据供应商类型查询
     *
     * @param supplierType 供应商类型
     * @param deletedFlag 删除标识
     * @return 供应商列表
     */
    List<SupplierEntity> selectByType(@Param("supplierType") Integer supplierType, @Param("deletedFlag") Boolean deletedFlag);

    /**
     * 根据状态查询供应商
     *
     * @param status 状态
     * @param deletedFlag 删除标识
     * @return 供应商列表
     */
    List<SupplierEntity> selectByStatus(@Param("status") Integer status, @Param("deletedFlag") Boolean deletedFlag);

    /**
     * 根据信用等级查询供应商
     *
     * @param creditRating 信用等级
     * @param deletedFlag 删除标识
     * @return 供应商列表
     */
    List<SupplierEntity> selectByCreditRating(@Param("creditRating") String creditRating, @Param("deletedFlag") Boolean deletedFlag);
}